package com.lishem.carl._04string;

/**
 * https://leetcode.cn/problems/reverse-string-ii/description/
 * <p>
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * <p>
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "abcdefg", k = 2
 * <p>
 * 输出："bacdfeg"
 * <p>
 * 示例 2：
 * <p>
 * 输入：s = "abcd", k = 2
 * <p>
 * 输出："bacd"
 */
public class _2LetCode541_反转字符串2 {

    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < s.length(); i += k) {
            reverseChar(chars, i, i + k >= chars.length ? chars.length - 1 : i + k - 1);
            i += k;
        }
        return new String(chars);
    }

    private void reverseChar(char[] chars, int left, int right) {
        while (left < right) {
            char c = chars[left];
            chars[left++] = chars[right];
            chars[right--] = c;
        }
    }


    public static void main(String[] args) {
        _2LetCode541_反转字符串2 sol = new _2LetCode541_反转字符串2();
        System.out.println(sol.reverseStr("abcdefg", 2));
        System.out.println(sol.reverseStr("abcd", 2));
    }
}
